﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using QuizAppMvc2.Models;
using QuizAppMvc2.Bll;
using System.Web.UI.DataVisualization.Charting;
using System.IO;

namespace QuizAppMvc2.Controllers
{
    public class DesempenhoController : Controller
    {
        //
        // GET: /Desempenho/
        private quizdbEntities _db = new quizdbEntities();


        public ActionResult Avalia()
        {
            NovoDesempenhoModels novo = new NovoDesempenhoModels();

            novo.materias = _db.Materias.ToList<Materia>();

            return View(novo);
        }


        public ActionResult Resposta(NovoDesempenhoModels novo)
        {
            DesempenhoModels resposta = new DesempenhoModels();

            System.Data.Objects.ObjectResult<EstatistiscaUsuarioPorMateria_Result> resultados;

            //Chart chart = new Chart();
            //MemoryStream ms = new MemoryStream();
            //chart.SaveImage(ms, ChartImageFormat.Png);
            //ViewData["char"] = ms.ToArray();


            if (novo.granularidade == null)
            {
                novo.granularidade = 10;
            }

            resultados = _db.EstatistiscaUsuarioPorMateria(Singleton.Instance.GetUserId(), novo.materiaid, novo.granularidade);

            foreach (EstatistiscaUsuarioPorMateria_Result r in resultados)
            {
                resposta.desempenhos.Add(new ItemDesempenho() { soma = (int)r.soma, quantidade = (int)r.quantidade, pocentual = (float)r.soma / (float)r.quantidade });
            }

            Session["abc"] = resposta;

            Chart myChart = CreateChart();
            ViewData["Chart"] = myChart;


            return View(resposta);
        }


        public ActionResult abc(int year)
        {
            var v = _db.Topicoes.Where(x => x.idMateria == year);
            //var v = db.Topicoes;

            return Json(
                v.Select(x => new { value = x.idTopico, novo = x.Nome }),
                JsonRequestBehavior.AllowGet
            );
        }

        public ActionResult Topicos(int idMateria)
        {
            quizdbEntities db = new quizdbEntities();
            var v = _db.Topicoes.Where(e => e.idMateria == idMateria);
            return Json(v, JsonRequestBehavior.AllowGet);
            //return Json(
            //    Enumerable.Range(1, 12).Select(x => new { value = x, text = x }),
            //    JsonRequestBehavior.AllowGet
            //);
        }


        public ActionResult Subtopicos(int year)
        {

            var v = _db.SubTopicoes.Where(x => x.idTopico == year);
            //var v = db.Topicoes;

            return Json(
                v.Select(x => new { value = x.idSubTopico, novo = x.Nome }),
                JsonRequestBehavior.AllowGet
            );
        }

        public ActionResult Chart()
        {
            
            using (var ms = new MemoryStream())
            {
                Chart myChart = CreateChart();
                myChart.SaveImage(ms, ChartImageFormat.Png);
                ms.Seek(0, SeekOrigin.Begin);
                return File(ms.ToArray(), "image/png", "mychart.png");
            }
        }

        private Chart CreateChart()
        {
            Chart chart = new Chart();
            chart.BackColor = System.Drawing.Color.Beige;

            chart.Width = 800;
            chart.Height = 300;
            chart.Attributes.Add("align", "left");

            chart.Titles.Add("Desempenho"); // Display a Title  
            chart.ChartAreas.Add(new ChartArea());
            Series serie = new Series();
            serie.IsValueShownAsLabel = false;
            serie.IsVisibleInLegend= false;
            
            chart.Series.Add(serie);
            serie.ChartType = SeriesChartType.Column;


            //serie.ChartType = SeriesChartType.Column;
            DesempenhoModels resposta = (DesempenhoModels)Session["abc"];

            foreach (ItemDesempenho i in resposta.desempenhos)
            {
                serie.Points.AddY((Double) i.pocentual);
            }
            
            
            
            

            
            
            return chart
             ;
        }



    }
}
